### EXERCICIO 7.6 B Uma estimativa da incerteza na previso do modelo

## Primeiro pegar os dados e arrumar os dados
babies <- read.table(file="babies.txt", sep=" ", header=T)

## Arrumando as variveis de interesse: 
#colocando NA  
babies$bwt[babies$bwt==999] <- NA
babies$gestation[babies$gestation==999] <- NA
#transformando peso em kg: 1 ona  0,0283495 quilogramas, portanto vou sobreescrever bwt
babies$bwt <- (babies$bwt)*0.0283495

## Agora fao o modelo peso bebe em quilogramas em funo do tempo de gestao em dias 
modelo.pg <- lm(babies$bwt ~ babies$gestation, data=babies)
plot(babies$bwt ~ babies$gestation) #plotando os dados
abline(modelo.pg, col="red") #colocando a linha que representa o modelo

## MAAAAAS eu preciso plotar as curvas do intervalo de confiana, e preciso calcular esse intervalo de confiana usando aquela frmula

# Preciso fazer o vetor da varivel preditora (x-gestao)
summary(babies$gestation) #min 148 max 353 (???)
vetor.x <- seq(from=(min(babies$gestation, na.rm=T)),to=(max(babies$gestation,na.rm=T)),by=1)
media.xv <- mean(vetor.x)



# Agora vou usar esse vetor.x pra calcular a formula e os intervalos de confiana
s2 <- var(babies$bwt)
n <- length(na.omit(babies$gestation))
ssx <- sum((na.omit(babies$gestation)- mean(na.omit(babies$gestation)))^2)              #com o observado!!! a parte de cima, do x ser com o predito

# Formula do erro padro em y
erro.padrao <- sqrt(s2 * ((1/n) + ((vetor.x-media.xv)^2)/ssx))
 
# Agora vou pegar esse vetor.x e ver quais seriam os y previstos pelo modelo
coeficientes <- as.table(coef(modelo.pg))
intercepto <- coeficientes[1]
inclinao <- coeficientes[2] 

vetor.y <- inclinao*vetor.x + intercepto

# Agora que j tenho o resultado da frmula preciso multiplicar o teste t para ter os valores dos intervalos de confiana
# lembrar que a distribuio de t  simtrica
t <- qt(0.975, (n-2))

intervalo <- erro.padrao*t

# Ai agora tenho que pensar no intervalo pra mais e pra menos
pra.mais <- vetor.y + intervalo
pra.menos <- vetor.y - intervalo

# PLOTANDO TUDO
modelo.pg <- lm(babies$bwt ~ babies$gestation, data=babies)
plot(babies$bwt ~ babies$gestation) #plotando os dados
abline(modelo.pg, col="red")

lines(vetor.x,pra.mais,col="darkorange4")
lines(vetor.x,pra.menos,col="darkorange")


### EXERCICIO 7.7 B Galileu estava certo?? 

## Primeiro, os dados
init.h <- c(600, 700, 800, 950, 1100, 1300, 1500)
h.d <- c(253, 337, 395, 451, 495, 534, 573)

## Plotando os grficos
plot(h.d~init.h)

#modelo 1
mod1 <- lm(h.d~init.h)
#modelo 2 (em funo da altura inicial e altura inicial^2)
mod2 <- update(mod1,.~. +I(init.h^2))
#modelo 3 (em funo da altura inicial, altura inicial^2 e altura inicial^3)
mod3 <- update(mod2,.~. +I(init.h^3))

## Agora vamos comparar os modelos
anova(mod1,mod2) # modelo 2 tem maior potencial de explicao

anova(mod2, mod3) # modelo 3 explica ainda mais que o modelo 2

# RSS do mod1=5671.2, do mod2=744.1, do mod3=48.25

##Plotando os modelos
abline(mod1, col="red")

cf.m2 <- coef(mod2)
curve(cf.m2[1]+cf.m2[2]*x+cf.m2[3]*x^2, col="darkorange", add=T)

cf.m3 <- coef(mod3)
curve(cf.m3[1]+cf.m3[2]*x+cf.m3[3]*x^2+cf.m3[4]*x^3, col="chartreuse4", add=T)



### EXERCICIO 7.8 B Massa de Recm - Nascidos

# Carregando dados
dados.babies <- read.table("babies.txt", header=TRUE, sep="", as.is=T)

# Removendo todas as linhas que tenham algum NA
# descobri que se eu pedir pra excluir os dados estranhos onde no h, d bug e apaga TUDO
dados.babies <- dados.babies[-which(dados.babies$gestation==999),]
dados.babies <- dados.babies[-which(dados.babies$age==99),]
dados.babies <- dados.babies[-which(dados.babies$height==99),]
dados.babies <- dados.babies[-which(dados.babies$weight==999),]
dados.babies <- dados.babies[-which(dados.babies$smoke==9),]

# Acho que peso e altura  colinear
lm(dados.babies$height ~ dados.babies$weight)
summary(lm(dados.babies$height ~ dados.babies$weight))
# Parece que no, correlao baixa (bem estranho)

### Pensando em todas variveis, sem interao
# (Vishe, sei que a sequncia importa quando faz anova, como proceder?!?)

# Modelo nulo
mod.0 <- lm(bwt ~ 1, data=dados.babies)
summary(mod.0)
anova(mod.0)

# Modelo "saturado" (acho que o saturado meeeesmo entra as interaes)
mod.saturado <- lm(bwt ~ gestation+parity+age+height+weight+smoke, data=dados.babies)
summary(mod.saturado)
anova(mod.saturado)

# Pelo modelo acima parece que age e weight tem pouca influencia, j vou fazer sem eles o restante

# Modelo sem age e weigtht um pouquinho melhor que o saturado
mod.1 <- lm(bwt ~ gestation+parity+height+smoke, data=dados.babies, na.action = na.omit)
summary(mod.1)
anova(mod.saturado,mod.1)

# Modelo sem parity tbm 
mod.2 <- lm(bwt ~ gestation+height+smoke, data=dados.babies)
summary(mod.2) 

# Comparando modelo 1 e 2
anova(mod.1, mod.2)
# modelo 2  melhor

# Modelo sem altura
mod.3 <- lm(bwt ~ gestation+smoke, data=dados.babies)
summary(mod.3) 

# Comparando modelo 2 e 3
anova(mod.2, mod.3)
#modelo 3  melhor

# Modelo sem smoke
mod.4 <- lm(bwt ~ gestation, data=dados.babies)
summary(mod.4)

# Comparando modelo 3 e 4
anova(mod.3, mod.4)
# O modelo 4 apenas com gestao  melhor :O

#Comparando modelo saturado com o 4
anova(mod.saturado,mod.4)
# Modelo 4 ainda parece ser melhor :O

# Vendo se algum modelo de apenas uma varivel ganha do 4, mas parece que no pois no d significativo
mod.5 <- lm(bwt ~ parity, data=dados.babies)
anova(mod.4 ,mod.5)

mod.6 <- lm(bwt ~ height, data=dados.babies)
anova(mod.4 ,mod.6)

### Pelas comparaes entre modelos que fiz, o modelo que mais explica  o modelo 4 (bwt ~ gestation).  Achei um pouco estranho, mas ele mostrou mais ajustado do que o saturado. Fiz modelos ode o peso dos bebs eram influenciadas apenas por uma varivel, e o modelo 4 mostrou-se melhor.